실전 트러블슈팅: React2Shell (CVE-2025-55182) 침해 사고 분석 및 대응 후기
1줄 요약
방화벽과 EDR/백신이 부재한 Linux 서버에 React2Shell (CVE-2025-55182) 공격이 인입되어 ps/top 프로세스 킬, chattr 바이너리 삭제, /etc/crontab 지속성 등록 및 부팅 의존성 변조를 일으킨 루트킷 침해 사고 분석 및 조치 일지.
1. 침해 징후: 관리자 도구 무력화 (Anti-Analysis)
고객사 서버 점검 중 프로세스 및 네트워크 분석 도구가 정상 동작하지 않는 심각한 이상 징후가 포착되었다.
ps,top,netstat등 상태 점검 명령어 실행 시 즉시Killed시그널과 함께 강제 종료./var/log/messages,dmesg등 시스템 로그가 고의적으로 파기(Zero-out)되어 흔적 은닉.ps바이너리를 임의 경로로 복사하여 실행해도 동일하게Killed되는 것으로 보아 커널 모듈 또는LD_PRELOAD레벨에서 프로세스 명/행위를 가로채는 루트킷 감지.
[React2Shell 공격자의 지속성 확보 메커니즘]
RCE 취약점 (CVE-2025-55182)
│
▼ (Root 권한 획득)
┌──────────────────────────────────────────────┐
│ 1. 프로세스 모니터링 무력화 (ps, top killed) │
│ 2. 관리자 도구 파기 (chattr 삭제 -> 불변 속성 고정)│
│ 3. 지속성 등록 (/etc/crontab, /etc/rc.local) │
│ └─ /etc/rondo/rondo react.x86_64.persisted│
│ 4. 부팅 시퀀스 장악 (변조 파일 삭제 시 OS 기동 불가)│
└──────────────────────────────────────────────┘2. 포렌식 분석: 악성코드 지속성(Persistence) 경로
공격자는 재부팅 후에도 지속성을 유지하기 위해 시스템 부팅 스케줄러를 치밀하게 변조했다.
/etc/crontab:@reboot root /etc/rondo/rondo react.x86_64.persisted삽입./etc/rc.local: 시스템 부팅 완료 직후rondo악성 바이너리를 백그라운드 구동하도록 설정.- 방어 기제 무력화: 악성 파일의 불변 비트(
+i)를 해제하지 못하도록chattr명령어를 파일시스템에서 고의 삭제.
bash
# chattr 실행 시도시 삭제된 상태 확인
# chattr -i /etc/rondo/rondo
-bash: chattr: command not found3. 대응 및 한계 분석
- 도구 복구: OS 기본 패키지인
e2fsprogs를 강제 재설치하여chattr바이너리를 임시 복원하고 불변 속성(-i) 해제 성공. - 부팅 파괴 함정: 악성 파일 권한을 무력화하고 서버를 재부팅하자, 시스템 초기화 스크립트가
rondo의 특정 시그널을 대기하도록 변조되어 있어 OS 커널 패닉 및 부팅 중단 발생. - 최종 판정: 커널 및 라이브러리 레벨까지 변조된 깊은 침해 상태로 판단하여, 부분 치료를 중단하고 **완전 격리 후 신규 인스턴스에 백업 데이터만 이관하여 OS 클린 재설치(Re-build)**를 단행.
4. 핵심 체크포인트 (Gotchas)
- 루트킷 침해 시 치료의 함정: 이미 Root 권한과 커널 레벨이 탈취된 Linux 서버는 개별 악성 파일만 지운다고 안전해지지 않으며, 부팅 먹통이나 백도어 잔존 가능성이 100%이므로 OS 재설치가 정답이다.
- 네트워크 인바운드 최소화: 웹 애플리케이션 프레임워크(React/Node.js/Spring 등)의 0-day RCE 취약점은 언제든 발생할 수 있으므로, 관리 포트 SSH(22)는 특정 IP만 화이트리스트하고 WAF를 전면에 배치해야 한다.
게시된 시간: 2026-05-17 04:05:04수정한 시간: 2026-08-15 13:57:00